// src/router/RouteGuard.tsx
import { Suspense, type ReactNode } from 'react'
import { Navigate, useLocation } from 'react-router-dom'
import { hasPermission } from './permission'
import {Loading} from '@/components/ui/loading' // 加载组件
import type { RouteConfig } from '@/types/routes'

interface RouteGuardProps {
  children: ReactNode;
  route: RouteConfig; // 这里应该使用RouteConfig类型，但为了简化使用any
}

const RouteGuard = ({ children, route }: RouteGuardProps) => {
  const location = useLocation()

  // 检查权限
  if (!hasPermission(route)) {
    // 如果未登录，重定向到登录页
    if (!localStorage.getItem('token')) {
      return <Navigate to="/login" state={{ from: location }} replace />
    }
    // 如果已登录但无权限，重定向到无权限页面
    return <Navigate to="/403" replace />
  }

  // 使用Suspense处理懒加载
  return (
    <Suspense fallback={<Loading />}>
      {children}
    </Suspense>
  )
}

export default RouteGuard
